home *** CD-ROM | disk | FTP | other *** search
- {
- >>Has anyone done anything to address Win95 long file names yet?
- >>I just need to be able to read them 4 now.
-
- >I haven't done anything with it, but the current version of Ralf Brown's
- >interrupt list describes the way for a DOS program to deal with them.
- >(Search for Windows95 *and* Chicago.) I don't know if that's the best way for
- >a Win16 program to deal with them, but it's certainly a possibility.
-
- There's actually a typo in release 47 of the list, as I've found out this
- evening while trying to handle these in BP (hence the cross-post to
- comp.lang.pascal.borland).
-
- Here's my BP code for a little program that prints both the short and
- long version of any longnamed file on C:. it'll be pretty similar in Delphi,
- if the INT 21 approach is what you're supposed to use in Win16.
- }
-
- USES Strings;
-
- type
- TSearchRec = record
- attr : longint;
- creation : comp;
- lastaccess : comp;
- lastmodification : comp;
- highfilesize : longint;
- lowfilesize : longint;
- reserved : comp;
- name : array[0..259] of char;
- shortname : array[0..13] of char;
- handle : word;
- end;
-
- const
- faReadOnly = $01;
- faHidden = $02;
- faSysFile = $04;
- faVolumeID = $08;
- faDirectory = $10;
- faArchive = $20;
- faAnyFile = $3F;
-
- function findfirst(filespec:string;attr:word;var S:TSearchRec):integer;
- begin
- filespec := filespec + #0;
- S.attr := attr;
- asm
- push ds
- push ss
- pop ds
- lea dx,filespec+1
- les di,S
- mov ax,$714e
- mov cx,attr
- mov si,0
- int $21
- les di,S
- mov word ptr es:[di+TSearchRec.handle], ax
- jc @1
- xor ax,ax
- @1:
- mov @result,ax
- pop ds
- end;
- end;
-
-
- function FindNext(var S:TSearchRec):integer;
- begin
- asm
- mov ax,$714f
- mov si,0
- les di,S
- mov bx,word ptr es:[di+TSearchRec.Handle]
- int $21
- jc @1
- xor ax,ax
- @1:
- mov @result,ax
- end;
- end;
-
- function FindClose(var S:TSearchRec):integer;
- begin
- asm
- mov ax,$71a1
- les di,S
- mov bx,word ptr es:[di+TSearchRec.Handle]
- int $21
- jc @1
- xor ax,ax
- @1:
- mov @result,ax
- end;
- end;
-
- procedure ShowLongNames(const path:string);
- var
- S : TSearchRec;
- Res : Integer;
- begin
- Res := findfirst(path+'\*.*',faAnyFile-faVolumeID,S);
- while Res = 0 do
- begin
- with S do
- begin
- if (S.Attr and faDirectory) <> 0 then
- begin
- if (StrComp(Name,'.') <> 0) and (StrComp(Name,'..') <> 0) then
- begin
- if ShortName[0] <> #0 then
- ShowLongNames(path+'\'+StrPas(ShortName))
- else
- ShowLongNames(path+'\'+StrPas(Name));
- end;
- end;
- if ShortName[0] <> #0 then
- writeln('ren ',path+'\'+StrPas(ShortName),' "',name,'"');
- end;
- Res := FindNext(S);
- end;
- FindClose(S);
- end;
-
- var
- x : integer;
- begin
- showlongnames('D:');
- end.
-